import { Request, Response, NextFunction } from 'express';

// 错误处理中间件
export const errorHandler = (
  err: Error,
  req: Request,
  res: Response,
  next: NextFunction
): void => {
  console.error(err.stack);
  
  // 默认错误响应
  let statusCode = 500;
  let message = '服务器内部错误';
  
  // 如果错误有状态码，使用它
  if ('status' in err && typeof err.status === 'number') {
    statusCode = err.status;
  }
  
  // 如果错误有消息，使用它
  if (err.message) {
    message = err.message;
  }
  
  // 处理特定类型的错误
  if (err.name === 'ValidationError') {
    statusCode = 400;
    message = '验证错误';
  } else if (err.name === 'UnauthorizedError') {
    statusCode = 401;
    message = '未授权访问';
  } else if (err.name === 'CastError') {
    statusCode = 400;
    message = '无效的ID格式';
  }
  
  // 发送错误响应
  res.status(statusCode).json({
    success: false,
    message,
    error: process.env.NODE_ENV === 'development' ? err.stack : undefined
  });
};